#!/bin/bash
# 设置环境变量
export COMPOSE_BAKE=true

# 检查 Docker 是否运行
echo "正在检查 Docker 是否运行..."
if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null
then
    echo "Docker 或 Docker Compose 未安装，请先安装它们。"
    exit 1
fi

# 停止正在运行的 Docker Compose 服务
echo "正在停止正在运行的服务..."
docker-compose -f docker-compose.yml down -v
echo "服务停止完成！"

echo "正在删除旧的该项目的 Docker 镜像..."
#查找:latest结尾的镜像并删除
for image in $(docker images | grep "latest" | awk '{print $3}'); do
    docker rmi $image
done
echo "旧的 Docker 镜像删除完成！"

# 检查端口是否被占用，如果被占用杀掉占用进程
echo "正在检查端口是否被占用..."
if lsof -i:8000 | grep -q "LISTEN"
then
    echo "端口 8000 被占用，正在杀掉进程..."
    lsof -i:8000 | awk '{print $2}' | xargs kill -9
fi
if lsof -i:5173 | grep -q "LISTEN"
then
    echo "端口 5173被占用，正在杀掉进程..."
    lsof -i:5173 | awk '{print $2}' | xargs kill -9
fi
if lsof -i:8080 | grep -q "LISTEN"
then
    echo "端口 8080 被占用，正在杀掉进程..."
    lsof -i:8080 | awk '{print $2}' | xargs kill -9
fi
if lsof -i:3306 | grep -q "LISTEN"
then
    echo "端口 3306 被占用，正在杀掉进程..."
    lsof -i:3306 | awk '{print $2}' | xargs kill -9
fi
if lsof -i:80 | grep -q "LISTEN"
then
    echo "端口 80 被占用，正在杀掉进程..."
    lsof -i:80 | awk '{print $2}' | xargs kill -9
fi
if lsof -i:6379 | grep -q "LISTEN"
then
    echo "端口 6379 被占用，正在杀掉进程..."
    lsof -i:6379 | awk '{print $2}' | xargs kill -9
fi
echo "端口检查完成！"

# 项目初始化
echo "初始化项目..."
# 删除数据迁移文件migrations 目录,如果有 migrations 目录则删除
find backend -type d -name "migrations" -exec rm -rf {} \;
echo "项目初始化完成！"

# 构建和启动 Docker Compose 服务
echo "正在构建和启动服务..."
docker-compose -f docker-compose.yml up --build -d
echo "服务构建和启动完成！"

echo "所有容器已启动，将执行后续初始化操作……"

#!/bin/bash

# 获取 MySQL 用户名和密码
mysql_data=$(grep MYSQL_DATABASE ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
mysql_name=$(grep MYSQL_USER ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
mysql_password=$(grep MYSQL_PASSWORD ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
# 检查是否成功获取了用户名和密码
if [ -z "$mysql_name" ] || [ -z "$mysql_password" ]; then
    echo "无法获取 MySQL 用户名或密码，请检查 .env 文件。"
    exit 1
fi

# 启动 MySQL 服务，检查是否有 vueblog 数据库，没有则创建
# 确保 MySQL 完全启动
echo "正在等待 MySQL 完全启动..."
while ! docker-compose -f docker-compose.yml exec -e MYSQL_PWD="$mysql_password" mysql mysql -u"$mysql_name" -e "SHOW DATABASES;" &> /dev/null; do
    sleep 1
done
echo "MySQL 启动完成！"

echo "正在检查数据库..."
# 数据库创建,如果没有则创建，如果有则清空数据
docker-compose -f docker-compose.yml exec -e MYSQL_PWD="$mysql_password" mysql mysql -u"$mysql_name" -e "DROP DATABASE IF EXISTS $mysql_data;"
docker-compose -f docker-compose.yml exec -e MYSQL_PWD="$mysql_password" mysql mysql -u"$mysql_name" -e "CREATE DATABASE IF NOT EXISTS $mysql_data;"
echo "数据库检查完成！"


# 启动后端服务，创建超级用户
echo "正在收集静态文件..."
docker-compose -f docker-compose.yml exec backend /bin/bash -c "python manage.py collectstatic --noinput"
echo "静态文件收集完成！"

echo "正在执行数据库迁移..."
# 进入 ctbloge 容器
docker-compose -f docker-compose.yml exec backend /bin/bash -c "python manage.py makemigrations accounts blog cms comments resources schedulers && python manage.py migrate"
echo "数据库迁移执行完成！"

echo "正在初始化数据..."
#创建超级管理员账号以及初始化菜单
docker-compose -f docker-compose.yml exec backend /bin/bash -c "python init_blog_db.py"
echo "数据初始化完成！"

echo "所有操作执行完成！部署结束！"

# 获取当前文件同级目录下的vueblog目录下的.env 文件的 HOST_URL 中获取项目地址，只保留单引号或者双引号内的地址，并打开浏览器访问
HOST_URL=$(grep HOST_URL ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
ADMIN_USERNAME=$(grep ADMIN_USERNAME ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
ADMIN_PASSWORD=$(grep ADMIN_PASSWORD ./backend/.env | sed 's/#.*//g' | awk -F "=" '{print $2}' | sed "s/[']//g" | sed 's/["]//g' | xargs)
echo "浏览器访问主页地址：https://$HOST_URL"
echo "初始管理员账号：$ADMIN_USERNAME 密码：$ADMIN_PASSWORD"
